{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook takes a trained model and evaluates it on the following metrics:\n",
    "1. ECE pre and post temperature scaling\n",
    "2. MCE pre and post temperature scaling\n",
    "3. Test error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import sys\n",
    "cwd = os.getcwd()\n",
    "module_path = \"/\".join(cwd.split('/')[0:-1])\n",
    "if module_path not in sys.path:\n",
    "    sys.path.append(module_path)\n",
    "import torch\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "import torch.backends.cudnn as cudnn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import dataloaders\n",
    "import Data.cifar10 as cifar10\n",
    "import Data.cifar100 as cifar100\n",
    "import Data.tiny_imagenet as tiny_imagenet"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import network architectures\n",
    "from Net.resnet import resnet50, resnet110\n",
    "from Net.wide_resnet import wide_resnet_cifar\n",
    "from Net.densenet import densenet121\n",
    "from Net.resnet_tiny_imagenet import resnet50 as resnet50_ti"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import metrics to compute\n",
    "from Metrics.metrics import expected_calibration_error\n",
    "from Metrics.metrics import maximum_calibration_error\n",
    "from Metrics.metrics import l2_error\n",
    "from Metrics.plots import reliability_plot, bin_strength_plot\n",
    "from Metrics.metrics import test_classification_net"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Dataset params\n",
    "\n",
    "dataset_num_classes = {\n",
    "    'cifar10': 10,\n",
    "    'cifar100': 100,\n",
    "    'tiny_imagenet': 200\n",
    "}\n",
    "\n",
    "dataset_loader = {\n",
    "    'cifar10': cifar10,\n",
    "    'cifar100': cifar100,\n",
    "    'tiny_imagenet': tiny_imagenet\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Mapping model name to model function\n",
    "models = {\n",
    "    'resnet50': resnet50,\n",
    "    'resnet50_ti': resnet50_ti,\n",
    "    'resnet110': resnet110,\n",
    "    'wide_resnet': wide_resnet_cifar,\n",
    "    'densenet121': densenet121,\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Checking if GPU is available\n",
    "cuda = False\n",
    "if (torch.cuda.is_available()):\n",
    "    cuda = True\n",
    "\n",
    "# Setting additional parameters\n",
    "torch.manual_seed(1)\n",
    "device = torch.device(\"cuda\" if cuda else \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "class args:\n",
    "    data_aug = True\n",
    "    gpu = device == \"cuda\"\n",
    "    train_batch_size = 128\n",
    "    test_batch_size = 128"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Enter the dataset: \n",
      "cifar10\n",
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n"
     ]
    }
   ],
   "source": [
    "# Taking input for the dataset\n",
    "print ('Enter the dataset: ')\n",
    "dataset = input()\n",
    "num_classes = dataset_num_classes[dataset]\n",
    "\n",
    "if (dataset == 'tiny_imagenet'):\n",
    "    print ('Enter dataset root path: ')\n",
    "    dataset_root = input()\n",
    "    train_loader = dataset_loader[dataset].get_data_loader(\n",
    "        root=dataset_root,\n",
    "        split='train',\n",
    "        batch_size=args.train_batch_size,\n",
    "        pin_memory=args.gpu)\n",
    "\n",
    "    val_loader = dataset_loader[dataset].get_data_loader(\n",
    "        root=dataset_root,\n",
    "        split='val',\n",
    "        batch_size=args.test_batch_size,\n",
    "        pin_memory=args.gpu)\n",
    "\n",
    "    test_loader = dataset_loader[dataset].get_data_loader(\n",
    "        root=dataset_root,\n",
    "        split='val',\n",
    "        batch_size=args.test_batch_size,\n",
    "        pin_memory=args.gpu)\n",
    "else:\n",
    "    train_loader, val_loader = dataset_loader[dataset].get_train_valid_loader(\n",
    "        batch_size=args.train_batch_size,\n",
    "        augment=args.data_aug,\n",
    "        random_seed=1,\n",
    "        pin_memory=args.gpu\n",
    "    )\n",
    "\n",
    "    test_loader = dataset_loader[dataset].get_test_loader(\n",
    "        batch_size=args.test_batch_size,\n",
    "        pin_memory=args.gpu\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Enter the model: \n",
      "resnet50\n",
      "Enter saved model name: \n",
      "resnet50_cross_entropy_350.model\n"
     ]
    }
   ],
   "source": [
    "# Taking input for the model\n",
    "print ('Enter the model: ')\n",
    "model_name = input()\n",
    "print ('Enter saved model name: ')\n",
    "saved_model_name = input()\n",
    "\n",
    "model = models[model_name]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Enter the number of bins: \n",
      "15\n",
      "[[964   2   9   4   3   0   0   0  12   6]\n",
      " [  0 980   0   0   0   0   0   0   1  19]\n",
      " [  7   1 935  12  14  16  10   1   3   1]\n",
      " [  8   1  13 885  15  60   8   3   4   3]\n",
      " [  2   0   6  13 965   7   2   5   0   0]\n",
      " [  2   1   5  51  12 918   2   9   0   0]\n",
      " [  4   1   8   9   8   4 963   0   0   3]\n",
      " [  6   0   5   6  13  12   0 956   2   0]\n",
      " [ 16   3   3   1   1   0   0   0 971   5]\n",
      " [  4  20   0   2   0   0   0   0   6 968]]\n",
      "Test error: 0.04949999999999999\n",
      "ECE: 0.043535523173213006\n",
      "MCE: 0.38646188378334045\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnoAAAH1CAYAAABhpFOcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde5hWZb3/8fcXJFTiIIp4DkUR3Z62jUfcAbpD00zzmJqJZm4zt+GvMisPYKm5NTIrtxtNkDymBWhWmgpomimmmQZqKEJiKh7ATA7C/ftjrZmG4ZnDM/PMzDOL9+u6nms563Cv75rFzHy8173WipQSkiRJKp5unV2AJEmS2odBT5IkqaAMepIkSQVl0JMkSSoog54kSVJBGfQkSZIKyqAnSZJUUFUR9CLiqIj4YUQ8FBFLIiJFxI2tbGuLiLg+IhZGxLKImBcRV0bEBpWuW5IkqZqt09kF5M4DdgX+AfwNGNqaRiJiMPAIsDEwDZgD7Al8GTgoIoallN6sSMWSJElVrlqC3tlkAe+vwHBgeivbuZos5J2VUvph7cyIGJ/v42Lg9OYa2WijjdKgQYNaWYIkSVLHeeKJJxallAaUWhbV9gq0iBhBFvRuSil9tozttgHmAvOAwSmlVfWW9QZeBQLYOKX0XlNt1dTUpFmzZpVfvCRJUgeLiCdSSjWlllXFGL0K2T+f3ls/5AGklN4FHgbWB/bu6MIkSZI6Q5GC3vb59PlGlr+QT4d0QC2SJEmdrkhBr28+XdzI8tr5/UotjIjTImJWRMx64403Kl6cJElSRytS0GtO5NOSgxJTShNSSjUppZoBA0qOZ5QkSepSihT0anvs+jayvE+D9SRJkgqtSEHvuXza2Bi87fJpY2P4JEmSCqVIQa/22XujImK148ofrzIMeB94tKMLkyRJ6gxdLuhFRI+IGJq/BaNOSmkucC8wCPhSg83GAb2Ayc09Q0+SJKkoquLNGBFxOHB4/uUm+XSfiJiU//eilNJX8//eHJgNvEwW6uo7g+wVaFdFxAH5ensBI8ku2X6r0rUvW7aMt956i3fffZeVK1dWunmpRbp3707v3r3p378/PXv27OxyJElVoiqCHrAbcFKDedvkH8hC3VdpRkppbkTUABcBBwEHk70R4ypgXErprYpVTBby5s+fzwYbbMCgQYPo0aMHEdH8hlIFpZRYsWIFS5YsYf78+Wy11VaGPUkSUIWvQKsGLX0F2quvvkqPHj3YaKONOqAqqXmLFi1ixYoVbLrppp1diiSpg6wtr0DrcO+++y59+vRpfkWpg/Tp04d33323s8uQJFUJg14brFy5kh49enR2GVKdHj16OFZUklTHoNdGjslTNfHfoySpPoOeJElSQRn0JEmSCsqgJ0mSVFDV8hy9YprZ/CNaOtXwkndiq8pEBMOHD2fGjBmdXYokqYuxR09tFhHNfooUUsaOHVu4Y5IkFZM9eqqYCy+8sNFlgwYN6rhCJElqxtixxdpPYwx6qpixnf2vWZIkrcZLt+pQL730Ev369aN///68/PLLqy1777332GGHHejevTszZ86smz969GgighdffJHx48czdOhQ1l13XbbYYgvOPvtslixZUnJff/vb3zjzzDPZZptt6NmzJxtuuCGf+tSnePzxx0uuv3LlSq655hqGDRtG3759WW+99dh222059dRTeeGFF4CsZ3LcuHEAjBw5crXL0/X985//5NJLL2W33XajV69efPjDH2afffbhlltuKbnv5cuX8+1vf5vBgwfTs2dPtt56a8477zyWLVvWsm+sJEkl2KOnDrX11ltz3XXXcfTRR3Pcccfx4IMPss462T/DM844gzlz5jB27FiGDx++xrZnn302Dz74IMcccwyHHXYY99xzD1deeSUPPfQQv/vd71h33XXr1v3jH//IqFGjeOuttzjwwAM54ogjWLRoEVOnTmW//fZjypQpHHzwwXXrL1++nEMOOYT77ruPLbfckuOPP54+ffowb948pkyZwn777cd2223HmDFjmDp1KjNnzuSkk04qeUn6nXfeYf/99+fJJ59k991355RTTmHVqlXcc889HH/88Tz77LN85zvfqVs/pcQxxxzDtGnTGDx4MGeeeSbLly/n+uuv589//nMFv/uSpLWNQU8V09il23XXXZdzzz237uujjjqKL37xi/zv//4v559/PpdeeimTJ09m8uTJjBgxgvPPP79kOw8//DBPPfUUH/nIRwC49NJLOfroo/nFL37B5ZdfXrfdBx98wDHHHMM//vEPpk+fvlpoXLhwIXvssQef//znmTdvHj179qyr/b777uPQQw/l9ttvr5sPsGzZsrpewzFjxvDOO+8wc+ZMRo8ezYgRI9aoc8yYMTz55JNcdtllnHPOOXXzly5dyuGHH84ll1zCUUcdxW677QbALbfcwrRp09h7772ZPn16XWAdN24ce+yxR5Pfc0mSmmLQU8XUXtJsqG/fvqsFPYDx48fzyCOPcNlll7H55ptz7rnnMmDAAG666Sa6dSs9ouDLX/5yXcgD6NatG5dffjlTp07l+uuvrwt6d999N3PnzuWrX/3qGj2Dm222Geeccw5jxozh/vvv5+CDD2blypVcffXVrLfeelxzzTWrhTyAnj17MmDAgBZ9D958801uvPFGampqVgt5kAXeyy67jHvuuYebb765LuhNnDgRgEsuuWS1Xsn+/ftz/vnnc/LJJ7do35IkNWTQU8WklFq87rrrrsttt91GTU0N//3f/01EcMcdd7DZZps1uk2py7nbbLMNW265JfPmzeOdd96hX79+/P73vwfg5ZdfLtnLWDvebvbs2Rx88MHMmTOHxYsXs9deezW5/5Z4/PHHWblyJRFRct8rVqyo23etP/7xj3Tr1o399ttvjfVL9RhKktRSBj11miFDhrDLLrvwyCOPsOOOOzJq1Kgm1x84cGDJ+Ztssgkvv/wyixcvpl+/frz55psA3H777U22949//APIxtQBbL755uUewhpq9/344483etNH/X0DLF68mP79+9OjR4811ttkk03aXJMkae3lXbfqNN/97nd55JFH2GijjXj22We59NJLm1z/tddeKzn/73//O5BdIq4/nTZtGimlRj+1z/3r168fAK+88kqbj6l232effXaT+54+ffpq27z11lt1vX2ljk2SpNYw6KlTPPLII1xwwQVsv/32PPPMM2y//fZceOGF/O53v2t0m/qPXKn14osvsmDBAgYNGlQX2Pbee28AHnrooRbVMnToUPr168fTTz/NwoULm12/e/fuQPY4lob23HNPunXr1uJ9A+y+++6sWrWq5LH79g1JUlsY9NTh3n77bY477ji6d+/OrbfeysCBA7nttttYZ511OO644+oufzb0gx/8YLVn761atYqvfe1rrFq1arUbFg477DAGDx7Mj3/8Y371q1+VbOv3v/89//znP4EsuJ1xxhm8//77nH766Ws8u2758uW88cYbdV9vuOGGAMyfP3+NdjfeeGNOOOEEZs2axbe//W0++OCDNdaZO3cuL730Ut3XtbV/61vfYunSpXXz33rrrdUewyJJUrkco6eKaerNGIcffnjdXaannHIK8+fP56qrrqqbt+uuu/K9732PM888k5NPPpk777xzjTaGDRvGbrvtxrHHHkvfvn255557+NOf/sRHP/rR1e5w7dGjB7/4xS848MADOeSQQ9h3333ZbbfdWH/99VmwYAGPP/44L774Iq+++irrr78+kL2+7Q9/+AN33XUXQ4YM4ZOf/CS9e/dmwYIF3HvvvVx++eWMHj0ayB6U3K1bN77xjW/wzDPPsMEGGwBw3nnnAfCjH/2IF154gQsuuICf/vSn7LfffgwcOJCFCxcye/ZsHn/8cW655Ra23nprAI477jhuu+027rzzTnbaaScOO+wwVqxYwR133MEee+zB3Llz23ZiJElrrSjnTsm1RU1NTZo1a1az682ePZsddtihAyqqbg3fClHKxIkTGT16ND/84Q8566yz+NSnPsW0adPWWO+II45gypQpjB8/nrPPPhvI3oxxww03MHfuXKZMmcK1117LvHnz2HDDDTn66KO56KKL6NOnzxptvf7664wfP55f/vKXvPjii3Tr1o1NN92UXXfdlcMPP5zPfOYzdQ9rhuz5e9dccw2TJ0/mL3/5CyklNttsM0aOHMk555zDtttuW7fujTfeyBVXXMFzzz1X1wtX/2dp+fLlTJgwgZtvvplnn32WpUuXMnDgQLbbbjsOPfRQTjzxxLqewdr1v/vd7zJp0iReeeUVNt10U0444QQuuOAC1l13XYYPH97iy7j+u5Sk5o0d3fxQnYrsZ1LbnubQEhHxREqppuQyg96aDHrVpTbovfTSSyXfRKHV+e9Skpq3tgQ9x+hJkiQVlEFPkiSpoAx6kiRJBWXQU9WbNGkSKSXH50mSVCaDniRJUkEZ9CRJkgrKoCdJklRQBj1JkqSCMuhJkiQVlEFPkiSpoAx6kiRJBWXQkyRJKiiDniRJUkGt09kFFNnYsZ1dQdOqvb5qMXbsWMaNG8f06dMZMWJEZ5cjSVKL2aOnirr44ouJCCKC5557rs3tjR07lohgxowZbS9OkqS1jEFPFZNS4ic/+QkRAcC1117byRVJkrR2M+ipYu69915eeuklTjrpJAYOHMgNN9zA8uXLO7ssSZLWWgY9VUxtD94XvvAFTjjhBBYtWsSUKVNKrrty5UquueYahg0bRt++fVlvvfXYdtttOfXUU3nhhRcAGDRoEOPGjQNg5MiRdZeEa3sMAUaMGLHa1/VNmjSJiGDSpEmrzZ8+fTqnnXYaO+64I3369GG99dZjp512Yty4cSxdurSt3wZJkqqGN2OoIl577TXuvPNOhgwZwr777kufPn0YP348EyZM4Nhjj11t3eXLl3PIIYdw3333seWWW3L88cfTp08f5s2bx5QpU9hvv/3YbrvtGDNmDFOnTmXmzJmcdNJJDBo0qCK1XnbZZcyZM4d9992XQw45hKVLl/Lwww8zduxYZsyYwX333Uf37t0rsi9JkjqTQU8VMXHiRFasWMHo0aMB2Gmnndh9992ZPn06f/3rX9l2223r1h07diz33Xcfhx56KLfffjs9e/asW7Zs2TKWLFkCwJgxY3jnnXeYOXMmo0ePrtgdr1dffTVbb731Gj2B559/Pt/5zne444471ginkiR1RV66VZullLjuuuvo1q0bn/vc5+rmjx49um5ZrZUrV3L11Vez3nrrcc0116wW8gB69uzJgAED2rXebbbZpuTl3jFjxgBwzz33tOv+JUnqKAY9tdkDDzzA3Llz+fjHP87mm29eN//444/nQx/6EJMmTWLFihUAzJkzh8WLF7PLLruw2WabdUq97733Hpdccgl77LEHffv2pVu3bkQEG220EQCvvPJKp9QlSVKleelWbTZhwgSAusu2tTbccEMOPfRQfv7znzNt2jSOOuoo3nnnHYDVAmFHWrFiBfvvvz+PPfYYO+20E8ceeywDBgygR48eAIwbN45ly5Z1Sm2SJFWaQU9t8sYbbzB16lQAjjvuOI477riS602YMIGjjjqKfv36AZXrNevWLeuU/uCDD1hnndX/OdeGyvqmTZvGY489xkknnbTG3bivvvpq3V2+kiQVgUFPbVL7rLyPfvSj7LbbbiXXufPOO7nvvvt46aWXGDp0KP369ePpp59m4cKFzV6+rb37deXKlSWXb7DBBgAsWLCArbfeerVls2bNWmP9v/71rwAceeSRayybOXNmk7VIktTVOEZPbVJ7o8XVV1/NddddV/LzX//1X3U3ZXTv3p0zzjiD999/n9NPP32Ny6TLly/njTfeqPt6ww03BGD+/Pkl97/nnnsCa76F4/777+eWW25ZY/3aR7Q0fKXaiy++yNe//vWWH7gkSV2APXpqtRkzZvDcc8+x88471wWuUj7/+c9z8cUXM3HiRMaNG8eF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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Evaluating the model at T = 1\n",
    "# Getting the number of bins\n",
    "print ('Enter the number of bins: ')\n",
    "num_bins = int(input())\n",
    "\n",
    "net = model(num_classes=num_classes, temp=1.0)\n",
    "net.cuda()\n",
    "net = torch.nn.DataParallel(net, device_ids=range(torch.cuda.device_count()))\n",
    "cudnn.benchmark = True\n",
    "net.load_state_dict(torch.load('./' + str(saved_model_name)))\n",
    "\n",
    "conf_matrix, accuracy, labels, predictions, confidences = test_classification_net(net, test_loader, device)\n",
    "ece = expected_calibration_error(confidences, predictions, labels, num_bins=num_bins)\n",
    "mce = maximum_calibration_error(confidences, predictions, labels, num_bins=num_bins)\n",
    "\n",
    "# Printing the required evaluation metrics\n",
    "print (conf_matrix)\n",
    "print ('Test error: ' + str((1 - accuracy)))\n",
    "print ('ECE: ' + str(ece))\n",
    "print ('MCE: ' + str(mce))\n",
    "\n",
    "# Plotting the reliability plot\n",
    "reliability_plot(confidences, predictions, labels, num_bins=num_bins)\n",
    "bin_strength_plot(confidences, predictions, labels, num_bins=num_bins)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Enter the number of bins: \n",
      "15\n",
      "Enter the optimal temperature: \n",
      "2.5\n",
      "[[964   2   9   4   3   0   0   0  12   6]\n",
      " [  0 980   0   0   0   0   0   0   1  19]\n",
      " [  7   1 935  12  14  16  10   1   3   1]\n",
      " [  8   1  13 885  15  60   8   3   4   3]\n",
      " [  2   0   6  13 965   7   2   5   0   0]\n",
      " [  2   1   5  51  12 918   2   9   0   0]\n",
      " [  4   1   8   9   8   4 963   0   0   3]\n",
      " [  6   0   5   6  13  12   0 956   2   0]\n",
      " [ 16   3   3   1   1   0   0   0 971   5]\n",
      " [  4  20   0   2   0   0   0   0   6 968]]\n",
      "Test error: 0.04949999999999999\n",
      "ECE: 0.013544935575127552\n",
      "MCE: 0.20599711142229227\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnoAAAHyCAYAAAB8oWMkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeZxe893/8dcnEUGaPRFrxBbhRlONXZvgbqqW0tpuVCWqqijxaO8uaknakrq1KG3qDpVQRUubhC64EaFUiVLll6AhkoraQqIqi+T7++OcGZPJNcs1c83MNSev5+NxPY4533O+53PmZGbezvI9kVJCkiRJxdOlowuQJElS2zDoSZIkFZRBT5IkqaAMepIkSQVl0JMkSSoog54kSVJBrdfRBVSjAQMGpCFDhnR0GZIkSU16/PHH30gpDSzVZtArYciQIcyePbujy5AkSWpSRLzUUJuXbiVJkgrKoCdJklRQBj1JkqSCMuhJkiQVVFUEvYg4KiKuiogHI2JpRKSIuLGFfW0REddFxKKIWB4R8yPiiojoW+m6JUmSqlm1PHV7HvBh4F/AP4BhLekkIrYFHgY2BmYAc4E9gLOBgyJi35TSmxWpWJIkqcpVxRk94BxgKNAL+HIr+plEFvLOSikdkVL6ZkrpAOByYAfgolZXKkmS1ElURdBLKc1MKT2fUkot7SMitgFGA/OBn9RrvhB4FzgxInq0uFBJkqROpFou3VbCAfn07pTS6roNKaV3IuIhsiC4F3BvpTa6fPlyFi9ezDvvvMOqVasq1a1Ulq5du9KzZ0/69etH9+7dO7ocSVKVKFLQ2yGfPtdA+/NkQW8oFQp6y5cvZ8GCBfTt25chQ4bQrVs3IqISXUvNllJi5cqVLF26lAULFjB48GDDniQJqJJLtxXSO58uaaC9Zn6fUo0RcWpEzI6I2a+//nqzNrh48WL69u3LgAEDWH/99Q156hARwfrrr8+AAQPo27cvixcv7uiSJElVokhBryk1KazkfYAppckppREppREDB5Z8L/Ba3nnnHXr16lWp+qRW69WrF++8805HlyFJqhJFCno1Z+x6N9Deq95yrbZq1Sq6detWqe6kVuvWrZv3ikqSahUp6D2bT4c20L59Pm3oHr4W8XKtqon/HiVJdRUp6M3Mp6MjYo39ioiewL7Ae8Aj7V2YJElSR+h0QS8iukXEsPwtGLVSSvOAu4EhwBn1VpsA9ABuSCm92y6FSpIkdbCqGF4lIo4Ajsi/3CSf7h0RU/P/fiOl9LX8vzcH5gAvkYW6uk4newXalRFxYL7cnsD+ZJdsv90W9UttKSIYOXIk999/f0eXIknqZKoi6AHDgZPqzdsm/0AW6r5GE1JK8yJiBPAd4CDgYOAV4EpgQkqpfcedmDW7XTdXtpEjKtJNc+4LmzlzJqNGjarI9jra+PHjmTBhQqH2SZJUTFUR9FJK44HxzVx2Ph8MlVKqfSEwthJ1qTwXXnhhg21Dhgxpv0IkSRJQJUFPxTB+/PiOLkGSpGZprz9ZHf2nsdM9jKHO7cUXX6RPnz7069ePl156aY22d999lx133JGuXbsya9as2vljxowhInjhhRe47LLLGDZsGBtssAFbbLEF55xzDkuXLi25rX/84x+ceeaZbLPNNnTv3p3+/fvz6U9/mscee6zk8qtWreLqq69m3333pXfv3my44YZst912nHLKKTz//PNAdmZywoQJAOy///5ERO2nrn//+99MnDiR4cOH06NHDz70oQ+x9957c/PNN5fc9ooVK/jud7/LtttuS/fu3dl6660577zzWL58efO+sZIkleAZPbWrrbfemmuvvZajjz6a4447jgceeID11sv+GZ5++unMnTuX8ePHM3LkyLXWPeecc3jggQc45phjOPzww7nrrru44oorePDBB/njH//IBhtsULvsX/7yF0aPHs3ixYv55Cc/yWc/+1neeOMNpk+fzn777ce0adM4+OCDa5dfsWIFhxxyCPfccw9bbrklxx9/PL169WL+/PlMmzaN/fbbj+23355x48Yxffp0Zs2axUknnVTykvTbb7/NAQccwBNPPMFuu+3GySefzOrVq7nrrrs4/vjjeeaZZ/je975Xu3xKiWOOOYYZM2aw7bbbcuaZZ7JixQquu+46/va3v1Xwuy9JWtcY9FQxDV263WCDDfjmN79Z+/VRRx3Fl7/8ZX76059y/vnnM3HiRG644QZuuOEGRo0axfnnn1+yn4ceeognn3ySrbbaCoCJEydy9NFH85vf/IZLL720dr3333+fY445hn/961/MnDlzjdC4aNEidt99d77whS8wf/58unfvXlv7Pffcw2GHHcatt95aOx9g+fLltWcNx40bx9tvv82sWbMYM2ZMyYcxxo0bxxNPPMEll1zC17/+9dr5y5Yt44gjjuDiiy/mqKOOYvjw4QDcfPPNzJgxg7322ouZM2fWBtYJEyaw++67N/o9lySpMQY9VUzNJc36evfuvUbQA7jssst4+OGHueSSS9h888355je/ycCBA/nFL35Bly6l7yg4++yza0MeQJcuXbj00kuZPn061113XW3Q+93vfse8efP42te+ttaZwc0224yvf/3rjBs3jnvvvZeDDz6YVatWMWnSJDbccEOuvvrqNUIeQPfu3Wnu+4/ffPNNbrzxRkaMGLFGyIMs8F5yySXcdddd3HTTTbVBb8qUKQBcfPHFa5yV7NevH+effz5jx/pskSSpZQx6qpiUUrOX3WCDDfjlL3/JiBEj+MpXvkJEcNttt7HZZps1uE6py7nbbLMNW265JfPnz+ftt9+mT58+/OlPfwLgpZdeKnmWseZ+uzlz5nDwwQczd+5clixZwp577tno9pvjscceY9WqVUREyW2vXLmydts1/vKXv9ClSxf222+/tZZ3+BZJUmsY9NRhhg4dyq677srDDz/MTjvtxOjRoxtdftCgQSXnb7LJJrz00kssWbKEPn368OabbwJw6623Ntrfv/71LyC7pw5g8803L3cX1lKz7ccee6zBhz7qbhtgyZIl9OvXj27duq213CabbLLWPEmSmsunbtVhvv/97/Pwww8zYMAAnnnmGSZOnNjo8q+++mrJ+f/85z+B7BJx3emMGTNIKTX4qRn3r0+fPgC8/PLLrd6nmm2fc845jW575syZa6yzePHi2rN9pfZNkqSWMOipQzz88MNccMEF7LDDDjz99NPssMMOXHjhhfzxj39scJ26Q67UeOGFF1i4cCFDhgypDWx77bUXAA8++GCzahk2bBh9+vThqaeeYtGiRU0u37VrVyAbjqW+PfbYgy5dujR72wC77bYbq1evLrnvvvZMktQaBj21u7feeovjjjuOrl27cssttzBo0CB++ctfst5663HcccfVXv6s70c/+tEaY++tXr2a//7v/2b16tVrPLBw+OGHs+222/KTn/yE3//+9yX7+tOf/sS///1vIAtup59+Ou+99x6nnXbaWmPXrVixgtdff7326/79+wOwYMGCtfrdeOONOeGEE5g9ezbf/e53ef/999daZt68ebz44ou1X9fU/u1vf5tly5bVzl+8ePEaw7BIklQu79FTxTT2Zowjjjii9inTk08+mQULFnDllVfWzvvwhz/MD3/4Q84880zGjh3L7bffvlYf++67L8OHD+fYY4+ld+/e3HXXXfz1r3/lox/96BpPuHbr1o3f/OY3fPKTn+SQQw5hn332Yfjw4Wy00UYsXLiQxx57jBdeeIFXXnmFjTbaCMhe3/bnP/+ZO+64g6FDh3LooYfSs2dPFi5cyN13382ll17KmDFjgGyg5C5duvCtb32Lp59+mr59+wJw3nnnAfDjH/+Y559/ngsuuICf//zn7LfffgwaNIhFixYxZ84cHnvsMW6++Wa23nprAI477jh++ctfcvvtt7Pzzjtz+OGHs3LlSm677TZ233135s2b17oDI0laZxn0VDENDa8C2Rslhg8fzlVXXcX06dP59Kc/zVe+8pU1ljnjjDO49957mTZtGpdffjnnnHPOGu2XX34506ZN45prrmH+/Pn079+fs88+m+985ztrDEsCsOuuu/LXv/6Vyy67jN/+9rdMmTKFLl26sOmmm/KRj3yECRMmMGDAgNrl119/fe68806uvvpqbrjhBq6//npSSmy22WZ85jOfWeOJ2B133JHrr7+eH/zgB0yaNKn2LFxN0OvVqxezZs1i8uTJ3HTTTfz6179m2bJlDBo0iO23357LL7+cT3ziE7X9RQS33nor3//+95k6dSo//vGP2XTTTRk7diwXXHDBWvsmSVJzRTlDYqwrRowYkWbPnt3kcnPmzGHHHXdsh4rWbWPGjOH666/nxRdfLPkmCq3Jf5eS1LQives2Ih5PKY0o1eY9epIkSQVl0JMkSSoog54kSVJBGfRU9aZOnUpKyfvzJEkqk0FPkiSpoAx6kiRJBeU4epIkad0zv+lXXlbGZu20ndI8oydJklRQBj1JkqSCMuhJkiQVlEFPkiSpoAx6kiRJBWXQkyRJKiiDntSE8ePHExHcf//9HV2KJEllcRy9NjR+fEdX0Li2qO+iiy7ivPPOA2Du3LnssMMOrepv/PjxTJgwgZkzZzJq1KgKVChJ0rrDM3qqmJQSP/vZz4gIAK655poOrkiSpHWbQU8Vc/fdd/Piiy9y0kknMWjQIK6//npWrFjR0WVJkrTOMuipYmrO4H3xi1/khBNO4I033mDatGkll121ahVXX301++67L71792bDDTdku+2245RTTuH5558HYMiQIUyYMAGA/fffn4io/dQYNWrUGl/XNXXqVCKCqVOnrjF/5syZnHrqqey000706tWLDTfckJ133pkJEyawbNmy1n4bJEmqGt6jp4p49dVXuf322xk6dCj77LMPvXr14rLLLmPy5Mkce+yxayy7YsUKDjnkEO655x623HJLjj/+eHr16sX8+fOZNm0a++23H9tvvz3jxo1j+vTpzJo1i5NOOokhQ4ZUpNZLLrmEuXPnss8++3DIIYewbNkyHnroIcaPH8/999/PPffcQ9euXSuyLUmSOpJBTxUxZcoUVq5cyZgxYwDYeeed2W233Zg5cyZ///vf2W677WqXHT9+PPfccw+HHXYYt956K927d69tW758OUuXLgVg3LhxvP3228yaNYsxY8ZU7GGMSZMmsfXWW691JvD888/ne9/7Hrfddtta4VSSpM7IS7dqtZQS1157LV26dOHzn/987fwxY8bUttVYtWoVkyZNYsMNN+Tqq69eI+QBdO/enYEDB7Zpvdtss03Jy73jxo0D4K677mrT7UuS1F4Memq1++67j3nz5vGJT3yCzTffvHb+8ccfz/rrr8/UqVNZuXIlkA25smTJEnbddVc222yzDqn33Xff5eKLL2b33Xend+/edOnShYhgwIABALz88ssdUpckSZXmpVu12uTJkwFqL9vW6N+/P4cddhi//vWvmTFjBkcddRRvv/02wBqBsD2tXLmSAw44gEcffZSdd96ZY489loEDB9KtWzcAJkyYwPLlyzukNkmSKs2gp1Z5/fXXmT59OgDHHXccxx13XMnlJk+ezFFHHUWfPn2Ayp0169IlOyn9/vvvs956a/5zrgmVdc2YMYNHH32Uk046aa2ncV955ZXap3wlSSoCg55apWasvI9+9KMMHz685DK3334799xzDy+++CLDhg2jT58+PPXUUyxatKjJy7c1T7+uWrWqZHvfvn0BWLhwIVtvvfUabbNnz15r+b///e8AHHnkkWu1zZo1q9FaJEnqbLxHT61S86DFpEmTuPbaa0t+vvSlL9U+lNG1a1dOP/103nvvPU477bS1LpOuWLGC119/vfbr/v37A7BgwYKS299jjz2Atd/Cce+993LzzTevtXzNEC3131v7wgsv8I1vfKP5Oy5JUifgGT212P3338+zzz7LLrvsUhu4SvnCF77ARRddxJQpU5gw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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Evaluating the model at T = T_opt\n",
    "# Getting the number of bins\n",
    "print ('Enter the number of bins: ')\n",
    "num_bins = int(input())\n",
    "print ('Enter the optimal temperature: ')\n",
    "t_opt = float(input())\n",
    "\n",
    "net = model(num_classes=num_classes, temp=t_opt)\n",
    "net.cuda()\n",
    "net = torch.nn.DataParallel(net, device_ids=range(torch.cuda.device_count()))\n",
    "cudnn.benchmark = True\n",
    "net.load_state_dict(torch.load('./' + str(saved_model_name)))\n",
    "\n",
    "conf_matrix, accuracy, labels, predictions, confidences = test_classification_net(net, test_loader, device)\n",
    "ece = expected_calibration_error(confidences, predictions, labels, num_bins=num_bins)\n",
    "mce = maximum_calibration_error(confidences, predictions, labels, num_bins=num_bins)\n",
    "\n",
    "print (conf_matrix)\n",
    "print ('Test error: ' + str((1 - accuracy)))\n",
    "print ('ECE: ' + str(ece))\n",
    "print ('MCE: ' + str(mce))\n",
    "\n",
    "# Plotting the reliability plot\n",
    "reliability_plot(confidences, predictions, labels, num_bins=num_bins)\n",
    "bin_strength_plot(confidences, predictions, labels, num_bins=num_bins)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
